// Source file:
// G:\\5o_ano\\PCS2040\\desenvolvimento\\rose\\Servidor\\Roteamento\\VerticeSubMapa.java

package servidor.roteamento;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class VerticeSubMapa extends Vertice {

    private Grafo subGrafoContido;
    
    private Collection[] arrayCaminhosPreCalculados;
    private static final int MAXIMO_RESTRICOES = 3;
    
    /**
     * @roseuid 426D7C500290
     */
    public VerticeSubMapa() {
        super();
        arrayCaminhosPreCalculados = new Collection[MAXIMO_RESTRICOES];
        for (int i = 0; i < arrayCaminhosPreCalculados.length; i++) {
            arrayCaminhosPreCalculados[i] = new ArrayList();
        }
    }

    /**
     * Ajusta o subGrafoContido.
     * @param subGrafoContido subGrafoContido
     */
    public void setSubGrafoContido(Grafo subGrafoContido) {
        this.subGrafoContido = subGrafoContido;
    }
    /**
     * @return Returns the subGrafoContido.
     */
    public Grafo getSubGrafoContido() {
        return subGrafoContido;
    }
    
    
    /**
     * @roseuid 4262CA1B00DA
     */
    public Collection getVerticesPontes() {
        Collection verticesPontes = new ArrayList();
        
        Collection vertices = subGrafoContido.getVertices();
        for (Iterator iter = vertices.iterator(); iter.hasNext();) {
            Vertice vertice = (Vertice) iter.next();
            if (vertice instanceof VerticePonte) {
                verticesPontes.add(vertice);
            }
        }
    	return verticesPontes;
    }

    /**
     * @roseuid 4262CA2D0280
     */
    public Caminho caminhoPreCalculado(Vertice origem, Vertice destino, int restricao) {
    	for (Iterator iter = arrayCaminhosPreCalculados[restricao].iterator(); iter.hasNext();) {
            Caminho c = (Caminho) iter.next();
            if (c.getInicial().getNome().equals(origem.getNome()) && c.getFinal().getNome().equals(destino.getNome())) {
                return c;
            }
        }
        return null;
    }
    
    public void addCaminhoPreCalculado(Caminho c) {
        arrayCaminhosPreCalculados[c.getRestricao()].add(c);
    }
}